package cn.com.okgo.callback;

import okhttp3.Response;
import okhttp3.ResponseBody;

/**
 * Created by luwenlong on 2017/8/28.
 *
 * 返回基础类
 */

public abstract class HttpCallback<T> extends Call<T>{

    /**
     * 请求成功
     * @param obj 返回
     * @param baseUrl 所使用的站点
     */
    public abstract void onSuccess(T obj,String baseUrl);

    /**
     * 返回失败
     * @param e       异常
     * @param baseUrl 所使用的站点
     */
    public abstract void onFailed(Exception e, String baseUrl);

    /**
     * 返回缓存数据
     * @param obj
     */
    public void onCache(T obj,String baseUrl){};

    /**
     * 返回下载进度
     * @param progress
     * @param total
     */
    public void onDownloadProgress(float progress, long total) {}

    /**
     * 返回下载进度 （当无法读取文件大小是，使用此方法显示进度条）
     * @param networkSpeed
     * @param total
     */
    public void onDownloadProgressByte(long networkSpeed, long total){}

    /**
     * 返回上传进度
     * @param progress
     * @param total
     */
    public void onUpLoadProgress(long progress, long total){};

    /**
     * 解析网络请求数据
     * @param response
     * @return
     * @throws Exception
     */
    public abstract T parseNetworkResponse(Response response) throws Exception;

    /**
     * 解析缓存数据
     * @param responseBody
     * @return
     * @throws Exception
     */
    public abstract T parseCacheResponse(ResponseBody responseBody) throws Exception;

    /**
     * 测试站点切换和重试请求使用
     * @param baseUrl
     */
    public void onRetry(String baseUrl){}

}
